package net.lgy.apitest.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import net.lgy.apitest.model.DO.ApiTestResultDO;
import net.lgy.apitest.service.ApiTestResultService;
import net.lgy.util.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * API测试结果Controller
 */
@RestController
@RequestMapping("/api/test-result/v1")
@Tag(name = "API测试结果管理", description = "API测试结果的查询操作")
public class ApiTestResultController {

    @Autowired
    private ApiTestResultService apiTestResultService;

    /**
     * 获取测试结果详情
     */
    @GetMapping("/{id}")
    @Operation(summary = "获取测试结果详情", description = "根据ID获取API测试结果的详细信息")
    public JsonData getTestResult(@PathVariable Long id, @RequestHeader("accountNo") Long accountNo) {
        // 先获取结果
        ApiTestResultDO testResult = apiTestResultService.getById(id);
        // 验证权限
        if (testResult != null && testResult.getAccountNo().equals(accountNo)) {
            return JsonData.buildSuccess(testResult);
        }
        return JsonData.buildError("测试结果不存在");
    }

    /**
     * 获取指定测试用例的最新测试结果
     */
    @GetMapping("/latest/{testCaseId}")
    @Operation(summary = "获取最新测试结果", description = "获取指定测试用例的最新测试结果")
    public JsonData getLatestTestResult(@PathVariable Long testCaseId, @RequestHeader("accountNo") Long accountNo) {
        ApiTestResultDO testResult = apiTestResultService.getLatestByTestCaseId(testCaseId, accountNo);
        return testResult != null ? JsonData.buildSuccess(testResult) : JsonData.buildError("未找到测试结果");
    }

    /**
     * 删除测试结果
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除测试结果", description = "删除指定ID的API测试结果")
    public JsonData deleteTestResult(@PathVariable Long id, @RequestHeader("accountNo") Long accountNo) {
        // 先验证权限
        ApiTestResultDO testResult = apiTestResultService.getById(id);
        if (testResult != null && testResult.getAccountNo().equals(accountNo)) {
            boolean result = apiTestResultService.removeById(id);
            return result ? JsonData.buildSuccess("删除成功") : JsonData.buildError("删除失败");
        }
        return JsonData.buildError("删除失败");
    }

    /**
     * 批量删除测试结果
     */
    @DeleteMapping("/batch")
    @Operation(summary = "批量删除测试结果", description = "批量删除指定ID列表的API测试结果")
    public JsonData batchDeleteTestResults(@RequestBody List<Long> ids, @RequestHeader("accountNo") Long accountNo) {
        // 使用正确的方法名
        boolean result = apiTestResultService.batchRemoveByIds(ids, accountNo);
        return result ? JsonData.buildSuccess("批量删除成功") : JsonData.buildError("批量删除失败");
    }
    
    /**
     * 获取测试用例的所有测试结果
     */
    @GetMapping("/test-case/{testCaseId}")
    @Operation(summary = "获取测试用例的测试结果", description = "获取指定测试用例的所有测试结果")
    public JsonData getTestResultsByTestCase(@PathVariable Long testCaseId, @RequestHeader("accountNo") Long accountNo) {
        List<ApiTestResultDO> testResults = apiTestResultService.getByTestCaseId(testCaseId, accountNo);
        return JsonData.buildSuccess(testResults);
    }
    
    /**
     * 获取用户的所有测试结果
     */
    @GetMapping("/list")
    @Operation(summary = "获取所有测试结果", description = "获取当前用户的所有API测试结果")
    public JsonData listTestResults(@RequestHeader("accountNo") Long accountNo) {
        List<ApiTestResultDO> testResults = apiTestResultService.getByAccountNo(accountNo);
        return JsonData.buildSuccess(testResults);
    }
}